package com.middlegroup.common.model;

import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 *
 * @author pc
 * @date 2019/1/8
 */
@Data
public class TransResult implements Serializable {

    private List data;

    /**
     * 上游商户订单号
     */
    @NotNull(message = "订单号不能为空!")
    private String billNo;
    /**
     * 商户订单号
     */
    @NotNull(message = "商户订单号不能为空!")
    private String merchantBillNo;
    /**
     * 交易结果，0：处理中，1：成功，2：失败
     */
    @NotNull(message = "交易状态不能为空!")
    private Integer transStatus;
    /**
     * 交易时间，毫秒时间戳
     */
    private Long transTime;
    /**
     * 返回信息
     */
    private String msg;
    /**
     * 交易金额，元为单位
     */
    private BigDecimal amount;
    /**
     * 上游返回订单号
     */
    private String transNo;

    /**
     * 校验码
     */
    private String validCode;

    /**
     * 步骤，发起第一步请求，主体端会返回下一步动作或者已完成的动作
     1：第一步请求
     2：确认验证码
     3：直接扣款（需客户端发起）
     4：直接扣款完成（主体端完成后返回结果）
     */
    @NotNull(message = "请求步骤不能为空!")
    private Integer step;

    /**
     * 步骤，发起第一步请求，主体端会返回下一步动作或者已完成的动作
     1：第一步请求
     2：确认验证码
     3：直接扣款（需客户端发起）
     4：直接扣款完成（主体端完成后返回结果）
     */
    private Integer nextStep;

    /**
     * 流程是否结束
     0：否
     1：是
     */
    @NotNull(message = "流程是否结束不能为空!")
    private Integer end;

    /**
     * 协议号（类似畅捷协议支付这种首次支付成功就算绑卡成功的情况，查询订单状态或者回调通知的时候需要返回）
     */
    private String protocolNo;

    /**
     * 流程下一步需要数据
     */
    private String nextStepData;


    public TransResult(){

    }
    public TransResult(String billNo,String merchantBillNo,Integer transStatus,String msg){
        this.billNo = billNo;
        this.merchantBillNo = merchantBillNo;
        this.transStatus = transStatus;
        this.msg = msg;
    }
    public TransResult(String billNo,String merchantBillNo,Integer transStatus,String msg,Long transTime){
        this.billNo = billNo;
        this.merchantBillNo = merchantBillNo;
        this.transStatus = transStatus;
        this.msg = msg;
        this.transTime = transTime;
    }
    public TransResult(String billNo,String merchantBillNo,Integer transStatus,String msg,String protocolNo){
        this.billNo = billNo;
        this.merchantBillNo = merchantBillNo;
        this.transStatus = transStatus;
        this.msg = msg;
        this.protocolNo = protocolNo;
    }

}
